package appliPhilosophes;

import plateformeSMA.Action;
import plateformeSMA.Agent;
import plateformeSMA.Data;
import plateformeSMA.Environnement;

public class Table implements Environnement {

	/**
	 * attribut permettant de connaitre l'etat des fourchettes
	 * censees etre sur la table, les booleens sont a vrai si la fourchette
	 * est effectivement sur la table
	 * La position dans le tableau correspondant a l'id du philosophe (dont c'est la fourchette gauche)
	 */
	private boolean [] fourchettes;
	/**
	 * N : le nombre de philosophes presents a la table
	 */
	private int n;


	public Table(int n) {
		this.n = n;
		this.fourchettes = new boolean[n];
		for (int i = 0;i<n;i++) {
			this.fourchettes[i] = true;
		}
	}


	//Reflechir sur => faut il mettre des getters/setters?
	public boolean[] getFourchettes(){
		return fourchettes;
	}
	public int getNbPhilosophes(){
		return n;
	}

	/**
	 *Methode qui met a jour les croyances de l'agent sur l'environnement
	 */
	@Override
	public void perceive(Agent a, String name) {
		for(Data belief :a.getMyBeliefs()){
			if(belief.getName().equals(name)){
				if(name.equals("fGauche")){
					belief.setValue(fourchettes[a.getAID()]);
				}
				if(name.equals("fDroite")){
					belief.setValue(fourchettes[(a.getAID()+1) % n]);
				}
			}
		}

	}

	@Override
	public boolean act(Agent agt, Action ac) {
		// TODO Auto-generated method stub
		return false;
	}

	public void printEtatFourchettesEnv(){
		System.out.println("Etat des fourchettes sur la table: \n");
		for (int i = 0;i<n;i++) {
			
			System.out.println("La fourchette "+i+": "+fourchettes[i]);
		}
	}
}
